package mx.com.theboard.server.handlers;
import java.util.ArrayList;
import java.util.List;

import com.google.code.twig.ObjectDatastore;
import com.google.code.twig.annotation.AnnotationObjectDatastore;

import mx.com.theboard.shared.Constantes;
import mx.com.theboard.shared.entidades.Nota;
import mx.com.theboard.shared.entidades.Pizarron;
import mx.com.theboard.shared.entidades.Punto;
import mx.com.theboard.shared.entidades.Usuario;

public abstract class NotaHandler implements NotaHandlerI {	

	public NotaHandler(){
	
	}
	
	public boolean isEditable(Nota nota){
		return true;
	}
	
	public Boolean borrar(Nota notac){
		ObjectDatastore datastore  = new AnnotationObjectDatastore();
		Nota nota = datastore.load().type(Nota.class).id(notac.getIdNota()).now();
		
		Usuario usuario = datastore.load().type(Usuario.class).id(nota.getUsuario().getIdUsuario()).now();
		usuario.getNotas().remove(nota);
		datastore.update(usuario);
		
		Pizarron pizarron = datastore.load().type(Pizarron.class).id(nota.getPizarron().getIdPizarron()).now();
		pizarron.getNotas().remove(nota);
		datastore.update(pizarron);
		
		Punto punto = datastore.load().type(Punto.class).id(nota.getPunto().getIdPunto()).now();
		datastore.delete(punto);
		
		datastore.delete(nota);
		
		return true;
	}
	
	public void mover(Punto punto, Nota nota){
		
	}
	
	public abstract Nota guardar(Nota nota);
	public abstract Nota actualizaNota(Nota nota);
	
	public static NotaHandlerI getNotaHandler(Nota nota){
		NotaHandlerI notaHandler = null;
		switch (nota.getTipo().intValue()) {
			case Constantes.TB_NOTA_TEXTO:
				notaHandler = new NotaTextoHandler();
				break;
			case Constantes.TB_NOTA_ARCHIVO:
				notaHandler = new NotaArchivoHandler();
				break;
			case Constantes.TB_NOTA_IMG:
				notaHandler = new NotaImagenHandler();
				break;
			case Constantes.TB_NOTA_DIBUJO:
				notaHandler = new NotaDibujoHandler();
				break;
			default:
				break;
			
		}
		return notaHandler;
	}
}
